# -*- encoding:utf-8 -*-

import os
import requests as req
import uuid
from utils.common_util import isEmpty
from requests.packages.urllib3.exceptions import InsecureRequestWarning
req.packages.urllib3.disable_warnings(InsecureRequestWarning)  # 取消报错
# 更多：https://www.runoob.com/python3/python-requests.html

def get(url,headers={},params={}):
    """
    打开网址，返回response响应对象
    :param url: 网址
    :param params: 请求参数
    :param headers:  请求头
    :return:
    """
    # 模仿谷歌浏览器请求，避免被拒绝【params请求参数】
    headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4385.0 Safari/537.36"
    resp = req.get(url, verify=False,params=params,headers=headers) # verify：是否跳过验证网址
    resp.encoding = resp.apparent_encoding # 读取并设置网页编码格式，防止乱码
    return resp

def post(url,headers={},json={}):
    """
    打开网址，返回response响应对象
    :param url: 网址
    :param json: 请求数据
    :param headers:  请求头
    :return:
    """
    # 模仿谷歌浏览器请求，避免被拒绝【params请求参数】
    headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4385.0 Safari/537.36"
    resp = req.post(url, verify=False,json=json,headers=headers) # verify：是否跳过验证网址
    resp.encoding = resp.apparent_encoding # 读取并设置网页编码格式，防止乱码
    return resp

def file(url,folder="./",filename = None,suffix="",headers={},params={}):
    """
    打开网址，并以文件保存到本地
    :param url: 网址
    :param resp: 相应对象
    :param folder: 文件夹，默认当前目录
    :param filename: 文件名
    :param suffix: 文件后缀，只有随机生成文件名时才会使用到,例: ".html"
    :param params: 请求参数
    :param headers: 请求头
    :return:
    """
    if not os.path.exists(folder): # 检查文件夹是否存在，如果不存在就新建
        os.mkdir(folder)
    resp = get(url,headers,params)
    if isEmpty(filename):
        filename = os.path.basename(resp.url)    # 尝试从url路径中获取文件名
    if isEmpty(filename):
        filename = str(uuid.uuid4()).replace("-", "")+suffix # url获取不到，则生成基于随机数的32位uuid作为文件名
    fb = open(os.path.join(folder, filename), "wb") # 以二进制格式新建一个文件只用于写入
    fb.write(resp.content) # # 以二进制字节流读取网络内容并写入到文件中
    fb.close()
    print(f"{filename} 下载完成")
